package cn.b.sky.user.dao;

import cn.b.sky.user.service.model.Menu;
import cn.b.sky.user.service.model.condition.MenuCondition;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 
 * @ClassName: MenuDao 
 * @Description:菜单数据接口
 * @author: ZhaoXin
 * @date: 2015-7-29 上午10:24:13
 * @version: V1.0  
 *
 */
public interface MenuDao {

  /**
   * 
   * <strong>Title : selectRootMenu<br></strong>
   * <strong>Description : </strong>查询根节点列表<br> 
   * <strong>Create on : 2015-8-13 下午02:26:51<br></strong>
   * <p>
   * @param isContainLock 是否包含锁定记录
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectRootMenu(@Param("siteCode") String siteCode, @Param("isContainLock") boolean isContainLock);

  /**
   * 
   * <strong>Title : selectMenuByParent<br></strong>
   * <strong>Description : </strong>查询子节点<br> 
   * <strong>Create on : 2015-8-13 下午02:27:15<br></strong>
   * <p>
   * @param parentMenuCode
   * @param isContainLock 是否包含锁定记录
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectMenuByParent(@Param("siteCode") String siteCode, @Param("parentMenuCode") String parentMenuCode,
                                       @Param("isContainLock") boolean isContainLock);

  /**
   * 
  * @Title:selectMenuByCode 
  * @Description:根据菜单编号查询菜单 
  * @param menuCode
  * @return Menu
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:04:29
  * @version: V1.0
   */
  public Menu selectMenuByCode(@Param("siteCode") String siteCode, @Param("menuCode") String menuCode);

  /**
   * 
  * @Title:insertMenu 
  * @Description:新增菜单
  * @param menu void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:26:44
  * @version: V1.0
   */
  public void insertMenu(Menu menu);

  /**
   * 
  * @Title:updateMenu 
  * @Description:修改菜单
  * @param menu void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:33:51
  * @version: V1.0
   */
  public void updateMenu(Menu menu);

  /**
   * 
  * @Title:selectMaxOrdinal 
  * @Description:查询父节点下的最大顺序号 
  * @param parentMenuCode
  * @return int
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:40:46
  * @version: V1.0
   */
  public int selectMaxOrdinal(@Param("siteCode") String siteCode, @Param("parentMenuCode") String parentMenuCode);

  /**
   * 
  * @Title:selectRootMaxOrdinal 
  * @Description:查询根节点的最大序号
  * @return int
  * @author: ZhaoXin
  * @date: 2015-7-29 下午07:06:25
  * @version: V1.0
   */
  public int selectRootMaxOrdinal(String siteCode);

  /**
   * 
  * @Title:deleteMenu 
  * @Description:删除菜单
  * @param menuCode void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:44:03
  * @version: V1.0
   */
  public void deleteMenu(@Param("siteCode") String siteCode, @Param("menuCode") String menuCode);

  /**
   * 
   * <strong>Title : selectMenuByUserName<br></strong>
   * <strong>Description : </strong>查询用户的菜单权限<br> 
   * <strong>Create on : 2015-8-11 上午10:50:58<br></strong>
   * <p>
   * @param userName 用户名全称
   * @param language 语言
   * @return
   * List<Menu>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectMenuByUserName(@Param(value = "userName") String userName,
                                         @Param(value = "language") String language);

  /**
   * 
   * <strong>Title : selectMenuList<br></strong>
   * <strong>Description : </strong>查询菜单列表<br> 
   * <strong>Create on : 2015-9-21 上午10:24:48<br></strong>
   * <p>
   * @param isContainLock
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectMenuList(@Param("siteCode") String siteCode, @Param("isContainLock") boolean isContainLock);
  
  /**
   * 
  * @Title:deleteMenu 
  * @Description:删除菜单国际化
  * @param menuCode void
  * @author: ZhaoXin
  * @date: 2015-7-29 下午06:44:03
  * @version: V1.0
   */
  public void deleteMenuTL(@Param("siteCode") String siteCode, @Param("menuCode") String menuCode);

  /**
   * 
   * <strong>Title : selectTypeMenuListByCondition<br></strong>
   * <strong>Description : </strong>查询菜单信息<br> 
   * <strong>Create on : 2016-10-26 下午3:21:04<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Menu>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectTypeMenuListByCondition(MenuCondition condition);

  /**
   * 
   * <strong>Title : selectTypeMenuCountByCondition<br></strong>
   * <strong>Description : </strong>查询菜单信息行数<br> 
   * <strong>Create on : 2016-10-26 下午3:23:08<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int selectTypeMenuCountByCondition(MenuCondition condition);

  /**
   * 
   * <strong>Title : selectMenuBySiteCode<br></strong>
   * <strong>Description : </strong>获取当前工厂下的所有菜单<br> 
   * <strong>Create on : 2017-3-7 下午1:26:47<br></strong>
   * <p>
   * @param siteCode
   * @param currentLanguage
   * @return
   * List<Menu>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<Menu> selectMenuBySiteCode(@Param("siteCode") String siteCode,
                                         @Param("language") String currentLanguage);

}
